package main

import (
	"fmt"
	"math/rand"
	"sort"
)

// 写这个东西，逻辑要清晰，才知道每一步做什么

// map的遍历 range
// 按照某个固定顺序遍历map
func main() {
	// 按照某个固定顺序遍历map
	var scoreMap = make(map[string]int, 100)

	// 添加 50 个键值对
	for i := 0; i < 50; i++ {
		key := fmt.Sprintf("stu%02d", i)
		value := rand.Intn(100) // 0 -99 随机数
		scoreMap[key] = value
	}
	// 遍历整个map
	for k, v := range scoreMap {
		fmt.Println(k, v)
	}

	// 按照key 从小到大的顺序去遍历scoreMap

	// 1、 先取出所有key存放到切片中
	keys := make([]string, 0, 100) //长度是 0 ，容量是 100
	for k := range scoreMap {
		keys = append(keys, k)
		// fmt.Println(keys)
	}

	// 2、对 key 做排序
	sort.Strings(keys) // keys 目前是有序的切片
	// fmt.Println(keys)

	// 3、 按照排序后的key对scoreMap排序
	for _, key := range keys {
		fmt.Println(key, scoreMap[key]) // 打印出key，并取出对应key中 map 的值
	}
}
